﻿using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using Microsoft.Practices.ObjectBuilder;
using GC2.Bussines.BMSeguridad;
using GC2.Entities.Seguridad;
using GC2.ExceptionHandler;

public partial class BMSeguridad_AdministracionAplicacionesTab : GenericPage
{    
    private ExceptionConstructor exNew = new ExceptionConstructor();

    private List<Aplicaciones> aplicacionesSource
    {
        get
        {
            return (List<Aplicaciones>)ViewState["aplicacionesSource"];
        }
        set
        {
            ViewState["aplicacionesSource"] = value;
        }
    }

    private Aplicaciones aplicacionActual
    {
        get
        {
            if (ViewState["aplicacionActual"] != null)
                return (Aplicaciones)ViewState["aplicacionActual"];
            else
                return null;
        }
        set
        {
            this.ViewState["aplicacionActual"] = value;
        }
    }

    private List<Roles> rolesAsignados
    {
        get
        {
            if (ViewState["rolesAsignados"] != null) return (List<Roles>)ViewState["rolesAsignados"];
            else return new List<Roles>();
        }
        set { ViewState["rolesAsignados"] = value; }
    }


    private bool Modificar
    {
        get
        {
            return (bool)ViewState["Modificar"];
        }
        set
        {
            ViewState["Modificar"] = value;
        }

    }

    #region Controles

        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                SetearCultura();
                SetearConexion();
                if (!this.IsPostBack)
                {
                    //AutenticacionUsuario();
                    //int iId_Usuario = System.Convert.ToInt32(Session["Id_Usuario"]);
                    //string srtPermiso = ControlPermisos((int)UI_Permissions.frmAplicaciones, iId_Usuario);
                    //if (srtPermiso != "S")
                    //{
                    //    Response.Redirect("~/Error.aspx", false);
                    //}
                    //else
                    //{
                        //this._presenter.OnViewInitialized();
                        ObtenerVariables();
                        tbcAplicacion.ActiveTabIndex = 0;

                    //    this._presenter.OnViewLoaded();
                    //}
                }
            }
            catch (Exception ex) { ErrorUI(ex); }
        }


    protected void btnGuardarAplicacion_Click(object sender, EventArgs e)
    {
        try
        {
            BMAplicaciones _presenter = new BMAplicaciones(Connection);
            bool bOkNuevo = true; 
            Aplicaciones oAplicacion = new Aplicaciones();
            Aplicaciones oAplicacionTemp = new Aplicaciones();
            if (txtAplicacionAplicacion.Text.Trim() != aplicacionActual.Nombre_Aplicacion ||
                 !Modificar)
            {
                oAplicacionTemp.Nombre_Aplicacion = txtAplicacionAplicacion.Text.Trim();
                oAplicacionTemp.Descripcion_Aplicacion = "";
                oAplicacionTemp.Modo_Autenticacion = "";
                oAplicacion = _presenter.BMAplicacionesVerificaNuevo(oAplicacionTemp);
                //Controla si ya existe Nombre_Aplicacion                
                if (oAplicacion.Id_Aplicacion != 0)
                {
                    //mpeAplicacion.Show();
                    bOkNuevo = false;
                }
            }

            if (bOkNuevo == true)
            {
                ActualizarAplicacion();

                if (Modificar)
                {
                    aplicacionActual.Id_Aplicacion = System.Convert.ToInt16(lblIdAplicacionAplicacion.Text);
                    _presenter.BMAplicacionesUpdate(aplicacionActual);
                    lblAplicacionAccion.Text = "Aplicación Actualizada";
                }
                else
                {
                    aplicacionActual.Fecha_Desde = DateTime.Parse(DateTime.Now.ToString("dd/MM/yyyy"));
                    oAplicacionTemp = _presenter.BMAplicacionesInsert(aplicacionActual);
                    lblIdAplicacionAplicacion.Text = oAplicacionTemp.Id_Aplicacion.ToString();
                    aplicacionActual.Id_Aplicacion = oAplicacionTemp.Id_Aplicacion;
                    rolesAsignados = _presenter.BMAplicacionesRolesAsignados(aplicacionActual);
                    lblAplicacionAccion.Text = "Nueva Aplicación Agregada";
                }
                txtAplicacionRoles.Text = txtAplicacionAplicacion.Text;
            }
        }
        catch (Exception ex) { ErrorUI(ex); }

    }
    protected void btnCancelarAplicacion_Click(object sender, EventArgs e)
    {
        Response.Redirect("../Default.aspx", false);
    }

    protected void btnCancelarRoles_Click(object sender, EventArgs e)
    {
        Cancelar();
    }

    protected void btnNuevo_Rol(object sender, EventArgs e)
    {
        try
        {

            if (lblIdAplicacionAplicacion.Text.Equals(""))
            {
                //mpeAltaAplicacion.Show();
            }
            else
            {
                Roles rol = null;
                Session["AplicacionTab"] = aplicacionActual;
                Session["Rol"] = rol;
                Response.Redirect("AdministracionRolesTab.aspx", false);
            }
        }
        catch (Exception ex)
        {
            ErrorUI(ex);
        }
    }

    protected void dgRoles_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        dgRoles.PageIndex = e.NewPageIndex;
        GridDataBound();
    }


    protected void dgRoles_RowDeleting(object sender, GridViewDeleteEventArgs e)
    {
        try
        {
            BMAplicaciones _presenter = new BMAplicaciones(Connection);
            Roles rol = new Roles();
            Roles rolTemp = new Roles();
            System.Web.UI.WebControls.Label label = (Label)dgRoles.Rows[e.RowIndex].Cells[0].FindControl("Id_Rol");
            rolTemp.Id_Rol = int.Parse(label.Text.Trim());
            rol = _presenter.BMRolesGetOne(rolTemp);
            rol.Fecha_Hasta = DateTime.Parse(DateTime.Now.ToString("dd/MM/yyyy"));
            _presenter.BMAplicacionesRolDelete(rol);

            rolesAsignados = _presenter.BMAplicacionesRolesAsignados(aplicacionActual);
            GridDataBound();
        }
        catch (Exception ex)
        {
            ErrorUI(ex);
        }
    }

#endregion

    #region Metodos


    /// <summary>
    /// ObtenerVarialbles() se ejecuta en load de la pagina cuando No es Postback
    /// toma datos de Sesión en aplicacionActual
    /// determina si es Modificacion o Alta de Aplicacion
    /// distribuye la información a mostrar...
    /// CB 12-07-2007
    /// </summary>
    private void ObtenerVariables()
    {
        try
        {
            BMAplicaciones _presenter = new BMAplicaciones(Connection);

            aplicacionActual = (Aplicaciones)Session["aplicacion"];

            ///SACAR
            aplicacionActual.Id_Aplicacion = 1;
            aplicacionActual = _presenter.BMAplicacionesGetOne(aplicacionActual);
            Modificar = true;

            if (aplicacionActual != null)
            {
                Modificar = true;
                lblIdAplicacionAplicacion.Text = aplicacionActual.Id_Aplicacion.ToString();
                Descargar();
            }
            else
            {
                Modificar = false;
                aplicacionActual = new Aplicaciones();
                BMRoles bmRoles = new BMRoles(Connection);
            }

            GridDataBound();

        }
        catch (Exception ex)
        {
            ErrorUI(ex);
        }
    }

    private void GridDataBound()
    {
        try
        {
            dgRoles.DataSource = rolesAsignados;
            dgRoles.DataBind();
        }
        catch (Exception ex)
        {
            ErrorUI(ex);
        }
    }  

    private void Descargar()
    {
        try
        {
            BMAplicaciones _presenter = new BMAplicaciones(Connection);

            // Descarga datos de aplicacion en base a aplicacionActual
            // Muestra datos del Panel udpaplicacion  (Panel 1 TabIndex 0) ABM aplicacion
            lblIdAplicacionAplicacion.Text = System.Convert.ToString(aplicacionActual.Id_Aplicacion);
            txtAplicacionAplicacion.Text = aplicacionActual.Nombre_Aplicacion;
            txtDescripcionAplicacion.Text = aplicacionActual.Descripcion_Aplicacion;
            //for (int i = 0; i < ddlModo.Items.Count; i++)
            //{
            //    if (ddlModo.Items[i].Text.Equals(aplicacionActual.Modo_Autenticacion))
            //    {
            //        ddlModo.SelectedIndex = i;
            //        break;
            //    }
            //}
            //cmbFormularioaplicacion();
            tbcAplicacion.ActiveTabIndex = 0;

            //Muestra datos del Panel udpRoles  (Panel 2 TabIndex 1) Asignar Roles a un aplicacion 
            txtAplicacionRoles.Text = txtAplicacionAplicacion.Text;
            rolesAsignados = _presenter.BMAplicacionesRolesAsignados(aplicacionActual);

        }
        catch (Exception ex)
        {
            ErrorUI(ex);
        }
    }

    /// <summary>
    /// Actualiza aplicacionActual, que es el Objeto para Udate e Insert aplicacion
    /// CB 13-07-2007
    /// </summary>
    private void ActualizarAplicacion()
    {
        try
        {
            aplicacionActual.Nombre_Aplicacion = txtAplicacionAplicacion.Text.Trim();
            aplicacionActual.Descripcion_Aplicacion = txtDescripcionAplicacion.Text.Trim();
            aplicacionActual.Modo_Autenticacion = ddlModo.SelectedItem.Text;
        }
        catch (Exception ex)
        {
            ErrorUI(ex);
        }
    }

    /// <summary>
    /// vuelve a página origen de Administracion Aplicaciones
    /// CB 23-07-2007
    /// </summary>
    private void Cancelar()
    {
        try
        {
            aplicacionActual = null;
            Response.Redirect("AdministracionAplicaciones.aspx", false);
        }
        catch (Exception ex) { ErrorUI(ex); }
    }

    #endregion
}


